package com.pucheng.bracelet.ui.view;

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.pucheng.bracelet.data.bean.BarChartBean;

import java.util.ArrayList;
import java.util.List;

public class MyBarChart extends BarChart {

    private YAxis leftAxis;             //左侧Y轴
    private YAxis rightAxis;            //右侧Y轴
    private XAxis xAxis;                //X轴
    private Legend legend;              //图例
    
    public MyBarChart(Context context) {
        super(context);
        initBarChart();
    }

    public MyBarChart(Context context, AttributeSet attrs) {
        super(context, attrs);
        initBarChart();
    }

    public MyBarChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initBarChart();
    }

    /**
     * 初始化BarChart图表
     */
    private void initBarChart() {
        /***图表设置***/
        //背景颜色
        setBackgroundColor(Color.TRANSPARENT);
        //不显示图表网格
        setDrawGridBackground(false);
        setPinchZoom(false);
        //背景阴影
        setDrawBarShadow(false);
        setHighlightFullBarEnabled(false);

        setDoubleTapToZoomEnabled(false);
        //禁止拖拽
        setDragEnabled(false);
        //X轴或Y轴禁止缩放
        setScaleXEnabled(false);
        setScaleYEnabled(false);
        setScaleEnabled(false);
        //禁止所有事件
//        setTouchEnabled(false);
        //不显示边框
        setDrawBorders(false);
        //不显示右下角描述内容
        Description description = new Description();
        description.setEnabled(false);
        setDescription(description);

        //设置动画效果
        animateY(1000, Easing.Linear);
        animateX(1000, Easing.Linear);

        setNoDataText("");

        /***XY轴的设置***/
        //X轴设置显示位置在底部
        xAxis = getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//        xAxis.setGranularity(1f);
        //不显示X轴网格线
        xAxis.setDrawGridLines(false);

        leftAxis = getAxisLeft();
        rightAxis = getAxisRight();


//        xAxis.setAxisMinimum(0f);
        //保证Y轴从0开始，不然会上移一点
//        leftAxis.setAxisMinimum(0f);
//        rightAxis.setAxisMinimum(0f);

        //不绘制X Y轴线条
        xAxis.setDrawAxisLine(false);
        leftAxis.setDrawAxisLine(false);
        rightAxis.setDrawAxisLine(false);
        //不显示左侧Y轴
        leftAxis.setEnabled(false);

        xAxis.setDrawGridLines(false);
        //隐藏虚线
        rightAxis.setDrawGridLines(false);
        rightAxis.setEnabled(false);
        //右侧Y轴网格线设置为虚线
//        rightAxis.enableGridDashedLine(10f, 10f, 0f);

        /***折线图例 标签 设置***/
        legend = getLegend();
        legend.setForm(Legend.LegendForm.LINE);
        legend.setTextSize(11f);
        //显示位置
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //是否绘制在图表里面
        legend.setDrawInside(false);

    }

    public void showBarChart(final List<BarChartBean> dateValueList, int color) {
        ArrayList<BarEntry> entries = new ArrayList<>();
        for (int i = 0; i < dateValueList.size(); i++) {
            /**
             * 此处还可传入Drawable对象 BarEntry(float x, float y, Drawable icon)
             * 即可设置柱状图顶部的 icon展示
             */
            BarEntry barEntry = new BarEntry(i, (float) dateValueList.get(i).getVaue());
            entries.add(barEntry);
        }
        // 每一个BarDataSet代表一类柱状图
        BarDataSet barDataSet = new BarDataSet(entries, "");
        initBarDataSet(barDataSet, color);
        clear();
        setData( new BarData(barDataSet));
//        xAxis.setValueFormatter((ValueFormatter) (value, axis) -> String.valueOf(dateValueList.get((int) Math.abs(value) % dateValueList.size())));
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (value < dateValueList.size()) {
                    return dateValueList.get((int)value).getName();
                }else {
                    return "";
                }
            }
        });
    }

    /**
     * 柱状图始化设置 一个BarDataSet 代表一列柱状图
     *
     * @param barDataSet 柱状图
     * @param color      柱状图颜色
     */
    private void initBarDataSet(BarDataSet barDataSet, int color) {
        barDataSet.setColor(color);
        barDataSet.setFormLineWidth(1f);
        barDataSet.setFormSize(10.f);
        //不显示柱状图顶部值
        barDataSet.setDrawValues(false);
//        barDataSet.setValueTextSize(10f);
//        barDataSet.setValueTextColor(color);
    }
}
